package com.smart.community.property.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.smart.community.property.entity.RepairProgress;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 维修工单进度记录Mapper接口
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》Entity规范实现：
 * - 功能单一原则：Mapper层负责数据库操作，Entity层只负责数据库字段映射
 * - 类型一致性：确保与Entity字段类型完全一致，progressType和status使用String类型
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 2.0.0 - 根据新Entity规范调整
 */
@Mapper
public interface RepairProgressMapper extends BaseMapper<RepairProgress> {

    /**
     * 根据工单ID查询进度记录列表
     * @param orderId 工单ID
     * @return 进度记录列表
     */
    List<RepairProgress> selectByOrderId(@Param("orderId") Long orderId);

    /**
     * 根据工单号查询进度记录列表
     * @param orderNo 工单号
     * @return 进度记录列表
     */
    List<RepairProgress> selectByOrderNo(@Param("orderNo") String orderNo);

    /**
     * 根据进度类型查询进度记录
     * @param orderId 工单ID
     * @param progressType 进度类型（1-受理，2-分配，3-开始维修，4-完成，5-取消）
     * @return 进度记录
     */
    RepairProgress selectByOrderIdAndType(@Param("orderId") Long orderId, @Param("progressType") Integer progressType);

    /**
     * 插入进度记录
     * @param progress 进度记录
     * @return 插入结果
     */
    int insertProgress(RepairProgress progress);

    /**
     * 批量插入进度记录
     * @param progressList 进度记录列表
     * @return 插入结果
     */
    int batchInsertProgress(@Param("list") List<RepairProgress> progressList);

    /**
     * 更新进度记录状态
     * @param id 进度记录ID
     * @param status 状态（1-正常，0-已删除）
     * @return 更新结果
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);

    /**
     * 删除工单相关的所有进度记录
     * @param orderId 工单ID
     * @return 删除结果
     */
    int deleteByOrderId(@Param("orderId") Long orderId);

    /**
     * 获取工单最新的进度记录
     * @param orderId 工单ID
     * @return 最新进度记录
     */
    RepairProgress selectLatestByOrderId(@Param("orderId") Long orderId);

    /**
     * 统计工单进度数量
     * @param orderId 工单ID
     * @return 进度数量
     */
    int countByOrderId(@Param("orderId") Long orderId);

    /**
     * 查询指定时间范围内的进度记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 进度记录列表
     */
    List<RepairProgress> selectByTimeRange(@Param("startTime") LocalDateTime startTime, 
                                         @Param("endTime") LocalDateTime endTime);

    /**
     * 查询维修人员相关的进度记录
     * @param repairmanId 维修人员ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 进度记录列表
     */
    List<RepairProgress> selectByRepairmanId(@Param("repairmanId") Long repairmanId,
                                           @Param("startTime") LocalDateTime startTime,
                                           @Param("endTime") LocalDateTime endTime);

    /**
     * 更新进度记录内容
     * @param id 进度记录ID
     * @param progressContent 进度内容
     * @return 更新结果
     */
    int updateProgressContent(@Param("id") Long id, @Param("progressContent") String progressContent);
} 